iT邦幫忙

2024 iThome 鐵人賽

0
自我挑戰組

前端工程師的java學習紀錄系列 第 31

Day31-線程Thread(一)

  • 分享至 

  • xImage
  •  

進程指的是一個應用程式執行的最小單位,而線程指的是在這個進程當中所執行的單個或多個執行的程式碼。

例如:使用windows作業系統(進程),可以同時打開不同的程式(線程)

例如:使用vs code(進程),可以同時下載插件(線程),可以同時打開開發者伺服器等等

創造Thread的方法一:

  1. 創建一個繼承Threadsubclass
  2. subclass中重寫run()方法,並且將需要透過這個thread執行的程式碼定義在run()方法中
  3. 實例化此subclass 並且透過實例化的物件使用start() 方法,就可以執行
class PrintNum extends Thread {
	@Override
	public void run() {
		for(int i = 0; i <= 100; i++) {
			System.out.println(i)
		}
	}
}

class PrintNumTest {
	public static void main(String[] args) {
		PrintNum printNum = new PrintNum();
		
		// 啟動新的thread,並且在另一個線程中執行
		printNum.start();
		
		// 在main的線程執行
		for(int i = 0; i <= 100; i++) {
			System.out.println(i)
		}
	}
}

printNum.start()啟動後會去執行run()中的循環,這時候main()中的循環也會在自己的線程中同時執行,所以可能會在console中產生交互的數字出現


創造Thread的方法二

  1. 實作一個Runnable接口的類
  2. 在此類中將Runnablerun()方法實作
  3. 將實作類實例化,使用構造器去實例化一個Thread
  4. 將實作類的實例化放入這個Thread類的構造器後,使用start()方法
class PrintNum implements Runnable {
	@Override
	public void run() {
		for(int i = 0; i <= 100; i++) {
			System.out.println(i)
		}
	}
}

class PrintNumTest {
	public static void main(String[] args) {
		PrintNum printNum = new PrintNum();
		
		// 這裡也是一個多態的操作
		Thread t1 = new Thread(printNum);
		// 啟動新的thread,並且在另一個線程中執行
		t1.start();
		
		// 在main的線程執行
		for(int i = 0; i <= 100; i++) {
			System.out.println(i)
		}
	}
}

常見的Thread方法:

  • currentThread:獲取當前執行程式碼的線程
  • getName:獲取線程名稱
  • setName:設置線程名稱
  • sleep(long 毫秒):【靜態方法】將線程休眠毫秒數
  • yield:【靜態方法】釋放CPU的執行權(如果有其他線程同時進行時,有可能會優先讓其他線程先執行)
  • join:在a線程中使用b線程的join() 方法時,會讓a線程阻塞,直到b線程運行完後才繼續執行a線程
  • isAlive:判斷當前線程是否存活

線程中的優先級,代表的只是有較高的機會被優先執行,但不是絕對,可以透過

  • getPriority() 取得當前線程的優先級(默認優先級是5
  • setPriority() 設置當前線程的優先級(只可以設定1-10之間)

Thread 中也有三個優先級的常量可以使用:

MAX_PRIORITY :最高優先級是10

MIN_PRIORITY :最低優先級是1

NORN_PRIORITY :默認優先級是5


上一篇
Day30-中場結尾,開始了就要有好結局?
下一篇
Day32-線程Thread(二)
系列文
前端工程師的java學習紀錄41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言